﻿/***********************************************************************
 * <copyright file="IAccount.cs" company="BUCA JSC">
 * -->    Copyright (C) statement. All right reserved
 * </copyright>
 * 
 * Created:   LinhMC
 * Email:    linhmc@buca.vn
 * Website:
 * Create Date: Tuesday, October 22, 2013
 * Usage: 
 * 
 * RevisionHistory: 
 * Date         Author               Description 
 * 
 * ************************************************************************/

using System.Collections.Generic;
using BusinessObjects.BussinessDictionary;

namespace DataObjects.StandartInterfaces.Dictionary
{
    /// <summary>
    /// Defines methods to access Account
    /// </summary>
    /// <remarks>
    /// This is a database-independent interface. Implementations are database specific
    /// </remarks>
    public interface IAccountDao
    {
        /// <summary>
        /// Gets the accounts for combo tree.
        /// </summary>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>List{AccountEntity}.</returns>
        List<Account> GetAccountsForComboTree(int accountId);
        /// <summary>
        /// Gets the inventory item categories by parent.
        /// </summary>
        /// <param name="parentId">The parent identifier.</param>
        /// <returns></returns>
        List<Account> GetAccountsByParent(int parentId); 

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<Account> GetPaged(int unitId, int currentPage); 

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<Account> GetAccountsForIsInventoryItem(int unitId);

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<Account> GetAccountsForIsTax(int unitId);

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<Account> GetAccountsByUnit(int unitId); 

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<Account> GetAccountsForIsFixedasset(int unitId); 

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<Account> GetAccountsForIsAccountingObject(int unitId);   
        /// <summary>
        /// Gets the size of the page.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        
        /// <returns></returns>
        int GetPageSize(int unitId);

        /// <summary>
        /// Gets the Accounts by unit.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <returns></returns>
        Account GetAccount(int AccountId);  
        
        /// <summary>
        /// Inserts the Account.
        /// </summary>
        /// <param name="Account">The Account.</param>
        string InsertAccount(Account Account);

        /// <summary>
        /// Updates the Account.
        /// </summary>
        /// <param name="Account">The Account.</param>
        string UpdateAccount(Account Account);

        /// <summary>
        /// Deletes the Account.
        /// </summary>
        /// <param name="Account">The Account.</param>
        string DeleteAccount(Account Account);

        /// <summary>
        /// Inserts the database option by unit.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <returns></returns>
        string InsertAccountByUnit(int unitId); 
    }
}
